<?php

/**
 * Api para crear un producto de tipo network de tamaño variable.
 * 
 * Con esta api, se podra crear, actualizar u obtener info sobre un producto personalizado
 *
 */
class PapiWS_Service_CustomNotebookProduct
{

	/**
	 * Crea un producto que representa una notebook de tamaño variable
	 *
	 * @param integer $width Ancho de la notebook
	 * @param integer $height Alto de la notebook
	 * @return mixed VO con el producto
	 */
	public function createCustomNotebook( $width, $height ) {
	
		// creamos un template
		$template = $this->createCustomNotebookTemplate($width, $height);

		// creamos un product a partir de este template
		$pservice = new PapiWS_Service_PersonalizedProduct();
		$prod = $pservice->createProductFromTemplate( $template );

		return $prod;
	}

	/**
	 * Crea un template para una notebook de tamaño variable
	 *
	 * @param integer $width Ancho de la notebook
	 * @param integer $height Alto de la notebook
	 * @return mixed VI con el template del producto.
	 */
    private function createCustomNotebookTemplate($width, $height) {

        // TODO: get params from config
        $soaUrl = 'http://soa.ext.com.ar';
        $margin = 10; // 1cm

        $productTemplate = new PapiWS_Model_ProductTemplateVO( );
        $face = new PapiWS_Model_FaceVO();
        $face->name = 'Tapa Notebook';
        $face->faceOrder  = 1;
        $face->eps = "$soaUrl/PapiWS/producttemplaterenderer/eps/width/$width/height/$height";
        $face->faceMask = "$soaUrl/PapiWS/producttemplaterenderer/mask/width/$width/height/$height";
        $face->faceMaskPreview = "$soaUrl/PapiWS/producttemplaterenderer/maskpreview/width/$width/height/$height";
        $face->faceBackground = "$soaUrl/PapiWS/producttemplaterenderer/background/width/$width/height/$height";

        $bbox = new PapiWS_Model_BoundingBoxVO();

		// hacemos la cuenta en mm
        $maskWidth  = $width * 2;
        $maskHeight = $height * 2;

        $bbox->width  = $width + $margin * 2;
        $bbox->height = $height + $margin * 2;
        $bbox->top    = ($maskHeight - $height) / 2 - $margin;
        $bbox->left   = ($maskWidth - $width) / 2 - $margin;

        $face->boundingBox = $bbox;

		// Estos sizes los necesita el flex editor en px
		$face->maskWidth = $this->mmToPx( $maskWidth );
		$face->maskHeight = $this->mmToPx( $maskHeight );

        $productTemplate->faces = array($face);
        $productTemplate->name = 'Notebook tamaño variable';
        $productTemplate->description = 'Notebook de tamaño variable. El usuario puede 
            ver los tamaños para armar un skin del tamaño que necesite.';

        return $productTemplate;
    }

    public function mmToPx( $length )
    {
        // TODO get from conf. Take into account
        // the fact that output DPI != input DPI !!!!
        $dpi = 100;
        $lengthPx = $length * $dpi / 25.4;
        return (int) round( $lengthPx );
    }

}
